关于byte/short/char三种类型的赋值问题

您所在的位置:网站首页 stata byte类型怎么引用条件 关于byte/short/char三种类型的赋值问题

关于byte/short/char三种类型的赋值问题

2024-05-30 03:48| 来源: 网络整理| 查看: 265

我们先来看一段代码。

byte num = 30;

这段代码看起来没有任何问题。但是大家都知道,Java中浮点数的默认值是double类型,整数的默认值是int类型。如果我们要写一个float类型的浮点数需要怎么写呢?

float f = 2.5f;

这里我们用上了强制类型转换,否则这段代码是要报错的。那么小伙伴们发现问题的所在了么?为什么第一段代码中等号右边的变量没有用强制类型转换?而且这段代码即使写到编译器中也是正确格式,也可以正确的运行。这里我们要了解一个新的小知识点。对于byte/short/char三种类型来说,若果右侧赋值的数值没有超过他们本身的取值范围,那么编译器将会隐式的为我们补上(byte)(short)(char)。也就是说,第一段代码的效果其实等同于byte num = (byte)30;。而如果右侧赋值的数值超过了其本身的取值范围,那么编译器就会直接报错。 我们再来看另一个例子。 在这里插入图片描述 这是一个很简单的代码。那么大家知道这里为什么会报错么? 我们之前学过,short/byte/char三种类型相加时,会自动转型为int类型,那么上面这段代码中,变量a是short类型,变量b也是short类型。但是a + b,会自动变成两个int类型的数相加,那么int型加int型,结果也一定是int型变量,所以最后的result也应该是int类型,而不是short类型。但是如果我们这么写: 在这里插入图片描述 这样就把两个变量相加,变成了两个常量相加,这称为“编译器的常量优化”在.java文件被编译成.class文件时,short result = 5 + 8;会直接变成short result = 13;因为等号右边的值是两个常量,常量的值不会改变,那么result的结果也不会改变。编译器的常量优化只有在等号右边全部都是常量时才可以。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3